6.1 while语句
语法:
while(表达式)语句
- 圆括号强制要求,循环体外面的大括号不强制要求使用(多个语句除外)
1 | i = 10; |
6.1.1 无限循环
说明:如果控制表达式的值始终是非零值的话,while语句将无法终止。
技巧:c语言程序员有时故意用非零常量作为控制表达式来构造无限循环。
1 | while(1) ... |
6.1.2 程序:显示平方值的表格
1 | /** |
1 | $ ./square |
6.1.3 程序:数列求和
1 | /** |
1 | $ ./sum |
6.2 do语句
语法:
do 语句 while(表达式);
语句说明:do语句的本质就是while语句,只不过do语句是在每次执行循环体之后对控制表达式进行判定的。
适用场景:至少要执行一次的循环体
注意:最好所有的do语句都适用大括号,因为没有大括号的do语句很容易被误认为while语句。
程序:计算整数中数字的位数
1 | /** |
1 | $ ./numdigit |
6.3 for语句
语法:
for (表达式1;表达式2;表达式3) 语句
1 | for(i = 10; i > 0; i--){ |
while模拟for:
1 | 表达式1; |
6.3.1 for语句的惯用法
1 | //从0向上加到n-1 |
6.3.2 在 for语句中省略表达式
省略 | 语法 | 说明 |
---|---|---|
表达式1 | for(; 表达式2; 表达式3) |
执行循环前没有初始化的操作 |
表达式2 | for(表达式1; ; 表达式3) |
表达式2默认为真值,无限循环 |
表达式3 | for(表达式1; 表达式2;) |
循环体有责任确认第二个表达式的值最终回变为假 |
表达式1、3 | for(;表达式2;) |
同while |
表达式1、2、3 | for(;;) |
简单的无限循环 |
6.3.3 逗号运算符
语法:
表达式1,表达式2
用途:为了在c语言要求单独一个表达式的情况下使用两个或多个表达式。
使用场景:宏、for
循环
优先级:低于所有其它运算符。
计算过程:
- 计算表达式1并且仍低哦计算出的值
- 计算表达式2,把这个值作为整个表达式的值
注意:计算表达式1始终会有副作用;如果没有,那么表达式1就没有了存在的意义。
6.2.4 程序:显示平方值的表格(改进版)
1 | /** |
6.4 退出循环
6.4.1 break语句
作用:把程序从
switch
语句中转移出来;跳出while
、do
、for
循环。
注意:break只能跳出一层循环
1 | for(;;){ |
6.4.2 continue 语句
作用:把程序控制正号转移到循环结束之前的一点;只能用于循环。
1 | n = 0; |
6.4.3 goto语句
语法:
- 标号语句:
标识符 : 语句
- goto语句:
goto 标识符
注意:
break
continue
return
本质上都是受限制的goto语句,它们和exit
函数配合可以应对大多数需要goto语句的情况。
1 | for(d = 2; d < n; d++){ |
6.4.4 程序:账目簿结算
6.5 空语句
语法:
;
用途:
- 编写空循环体(在某些情况下帮助省略循环体)
goto
语句的标号不能独立存在,后面必须有语句,可以使用空语句
1 | for(d =2; d < n && n % d != 0; d++) |
注意:建议将空语句单独放在一行,便于代码阅读。